/**
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **************************************************************************
 */

#import "objc/TINKDeterministicAeadKeyTemplate.h"

#import <XCTest/XCTest.h>

#import "objc/TINKKeyTemplate.h"
#import "objc/core/TINKKeyTemplate_Internal.h"
#import "objc/util/TINKProtoHelpers.h"
#import "proto/AesSiv.pbobjc.h"
#import "proto/Common.pbobjc.h"
#import "proto/Tink.pbobjc.h"

@interface TINKDeterministicAeadKeyTemplatesTest : XCTestCase
@end

@implementation TINKDeterministicAeadKeyTemplatesTest

- (void)testAesSivKeyTemplates {
  static NSString *const kTypeURL = @"type.googleapis.com/google.crypto.tink.AesSivKey";

  NSError *error = nil;
  // AES-256 SIV
  TINKDeterministicAeadKeyTemplate *tpl =
      [[TINKDeterministicAeadKeyTemplate alloc] initWithKeyTemplate:TINKAes256Siv error:&error];
  XCTAssertNil(error);
  XCTAssertNotNil(tpl);

  error = nil;
  TINKPBKeyTemplate *keyTemplate = TINKKeyTemplateToObjc(tpl.ccKeyTemplate, &error);
  XCTAssertNil(error);
  XCTAssertNotNil(keyTemplate);

  XCTAssertTrue([kTypeURL isEqualToString:keyTemplate.typeURL]);
  XCTAssertTrue(keyTemplate.outputPrefixType == TINKPBOutputPrefixType_Tink);
  error = nil;
  TINKPBAesSivKeyFormat *keyFormat = [TINKPBAesSivKeyFormat parseFromData:keyTemplate.value
                                                                    error:&error];
  XCTAssertNil(error);
  XCTAssertNotNil(keyFormat);
  XCTAssertTrue(64 == keyFormat.keySize);
}

@end
